Make a dependencies map while building feature map
authorDirkjan Ochtman <dirkjan@ochtman.nl>
Thu, 5 Apr 2018 14:23:11 +0000 (16:23 +0200)
committerDirkjan Ochtman <dirkjan@ochtman.nl>
Sat, 28 Apr 2018 11:41:18 +0000 (13:41 +0200)
src/cargo/core/summary.rs

index a824233f9504a79b759ad6aacb303ce0f6a5d4eb..d51db6b889891b776777548ef14e862ac152edf5 100644 (file)
@@ -1,4 +1,4 @@
-use std::collections::BTreeMap;
+use std::collections::{BTreeMap, HashMap};
 use std::mem;
 use std::rc::Rc;
 
@@ -133,6 +133,11 @@ fn build_feature_map(
     dependencies: &[Dependency],
 ) -> CargoResult<FeatureMap> {
     use self::FeatureValue::*;
+    let dep_map: HashMap<_, _> = dependencies
+        .iter()
+        .map(|d| (d.name().as_str(), d))
+        .collect();
+
     let mut map = BTreeMap::new();
     for (feature, list) in features.iter() {
         let mut values = vec![];
@@ -148,7 +153,7 @@ fn build_feature_map(
                 match val {
                     Feature(_) => None,
                     Crate(ref dep_name) | CrateFeature(ref dep_name, _) => {
-                        dependencies.iter().find(|d| d.name() == *dep_name)
+                        dep_map.get(dep_name.as_str())
                     }
                 }
             };